<?php

namespace app\user\controller;

use app\user\controller\Auth;
use think\Db;
use app\user\controller\Core;

class System extends Auth
{
    //需验证方法集
    protected $is_check_login = ['register', 'login', 'getCode', 'inlet'];


    // 入口
    public function inlet()
    {
        // 访问页面
        $IndexPage = input('IndexPage') == null ? 'index' : input('IndexPage');
        // 判断方法是否存在
        if (method_exists($this, $IndexPage)) {
            $this->assign('IndexPage', $IndexPage);
            return $this->$IndexPage();
        } else {
            return "不存在的服务类型";
        }
    }

    // 影视评论
    public function comment()
    {
        $info = ['user_id' => input('uid'), 'say_type' => input('type'), 'say_content' => input('content')];
        // 添加用户
        $user_id =  Db::table('v1_user')->insertGetId($info);
    }

    // 内容收藏
    public function collection()
    {
        // 执行收藏操作 
        $Core = new Core;
        $res = $Core->putCollection();
        if ($res) {
            return request_tips(200, "收藏成功");
        } else {
            return request_tips(404, "取消收藏");
        }
    }

    // 播放记录
    public function putSeeRecord()
    {
        // 执行记录操作 
        $Core = new Core;
        $res = $Core->putSeeRecord();
        if ($res) {
            return 'ok';
        } else {
            return '';
        }
    }


    // 用户注册
    public function register()
    {
        // 验证字段
        $auth = ['user_name', 'password', 'password2', 'captcha', 'email'];
        // 判断关键字段是否为空
        if ($this->hasVariable($auth, 'post', true)) {
            // 判断验证码是否正确
            if (input("?post.captcha") && !captcha_check(input('captcha'))) {
                return request_tips(422, "验证码错误");
            };
            //判断密码是否提交
            if (input("post.password") != input('password2')) {
                return request_tips(422, "两次密码不一致");
            }
            // 推荐人
            $recommend = input('recommend') == null ? input('recommend') : '';
            // 获取请求参数
            $post = input('post.');
            // 检查用户是否存在
            $check = db('v1_user')->where('user_name', $post['user_name'])->whereOr('user_email', $post['email'])->find();
            // 判断用户是否存在
            if ($check) {
                return request_tips(422, "用户名或注册邮箱已存在");
            } else {
                $res = false;
                // 启动事务
                Db::startTrans();
                try {
                    $info = ['user_name' => input('user_name'), 'user_passwd' => cms_md5(input('password')), 'user_email' => input('email')];
                    // 添加用户
                    $user_id =  Db::table('v1_user')->insertGetId($info);
                    // 判断添加状态
                    if ($user_id > 0) {
                        $user_info = ['user_id' => $user_id, 'user_nick' => "昵称" . input('user_name'), 'user_groom' => time(), 'user_grooms' => $recommend];
                        // 添加用户信息
                        $res = Db::table('v1_user_info')->insert($user_info);
                        // 判断执行详情
                        if ($res) {
                            // 获取通知开关
                            $sw  = isset(getConfig('emailset')['regmsg']) ? getConfig('emailset')['regmsg'] : '';
                            if (!empty($sw)) {
                                // 初始化邮件信息
                                $email_cof['to'] = input('email');
                                $email_cof['title'] = "账号注册";
                                $email_cof['content'] = $this->upCode();
                                $e_res = $this->sendEmail($email_cof);
                                $einfo = [
                                    'elog_type' => '注册成功',
                                    'elog_state' => $e_res['code'],
                                    'elog_content' => $email_cof['content'],
                                    'elog_user' => $email_cof['to'],
                                    'ask_ip' => request()->ip()
                                ];
                                // 记录邮件信息
                                Db::table('v1_email_log')->insert($einfo);
                            }
                        }
                    } else {
                        $res = false;
                    }
                    // 提交事务
                    Db::commit();
                } catch (\Exception $e) {
                    $res = false;
                    // 回滚事务
                    Db::rollback();
                }
                // 判断注册详情
                if ($res) {
                    return request_tips(200, "注册成功");
                } else {
                    return request_tips(200, "注册失败");
                }
            }
            // 注册用户
            $res = db('v1_user')->insert();
        } else {
            return  [
                'code' => 422,
                'msg' => "注册信息不能留空"
            ];
        }
    }

    // 登录
    public function login()
    {
        // 判断验证码是否正确
        if (input("?post.captcha") && !captcha_check(input('captcha'))) {
            return request_tips(422, "验证码错误");
        };
        // 验证账号密码
        if ($this->hasVariable(['user_name', 'user_pwd'], 'post', true)) {
            // 查询用户信息
            $data = db('v1_user')->where('user_name', input('user_name'))->find();
            // 判断用户是否存在
            if ($data) {
                // 验证密码是否正确
                if ($data['user_passwd'] == cms_md5(input('user_pwd'))) {
                    @$this->upUserInfo($data);
                    // 验证可用状态
                    if ($data['user_state'] == "on") {
                        //记录用户账户
                        session("username", $data['user_name']);
                        session("userinfo", $data);
                        //记录登录状态
                        session("userlycmsauth", true);
                        return request_tips(200, "登录成功");
                    } else {
                        return request_tips(500, "限制登录,请联系管理员解除");
                    }
                } else {
                    return request_tips(422, "密码错误");
                }
            } else {
                return request_tips(404, "用户不存在");
            }
        } else {
            return request_tips(422, "账号或密码不能为空");
        }
    }

    // 获取验证码
    public function getCode()
    {
        // 验证字段
        if ($this->hasVariable(['email', 'type'], 'post', true)) {
            if (input('type') == 'register') {
                // 验证邮箱格式是否正确
                if (filter_var(input('email'), FILTER_VALIDATE_EMAIL)) {
                    $info['to'] = input('email');
                    $info['title'] = "注册验证码";
                    $info['content'] = captcha_src();
                    $res = $this->sendEmail($info);
                    if ($res['code'] == 1) {
                        return ['code' => 200, 'msg' => "验证码发送成功,请注意查收！"];
                    } else {
                        return ['code' => $res['code'], 'msg' => "验证码" . $res['msg']];
                    }
                } else {
                    return ['code' => 422, 'msg' => "邮箱格式错误"];
                }
            }
        } else {
            return ['code' => 404, 'msg' => "不存在的操作类型"];
        }
    }

    // 修改信息
    public function infoedit()
    {
        // 不修改信息
        $info = [];
        // 不修改密码
        $editPwd = false;
        // 判断是否修改昵称
        if (input('?post.user_nick') && !empty(input('post.user_nick'))) {
            $info['v1_user_info.user_nick'] = input('post.user_nick');
        }

        // 判断是否修改QQ
        if (input('?post.user_qq') && !empty(input('post.user_qq'))) {
            $info['v1_user_info.user_qq'] = input('post.user_qq');
        }

        // 验证密码不能为空
        if ($this->hasVariable(['user_pwd', 'user_pwd1', 'user_pwd2'], 'post', true)) {
            // 判断新密码是否一致
            if (input('post.user_pwd1') == input('post.user_pwd2')) {
                $editPwd = true;
                $mm =  cms_md5(input('post.user_pwd'));
                $info['user_passwd'] = cms_md5(input('post.user_pwd2'));
            } else {
                return request_tips(422, "二次密码错误");
            }
        }

        // 判断是否需要修改
        if ($info) {
            // 查询用户
            $data = Db::table('v1_user')->where('user_name', session('username'))->find();
            // 判断用户是否存在
            if ($data['user_id']) {
                // 是否修改密码
                if ($editPwd) {
                    // 验证密码
                    if ($data['user_passwd'] != $mm) {
                        return request_tips(422, "原密码错误");
                    } else {
                        // 注销登录状态
                        session('userlycmsauth', null);
                    }
                }
                //事务处理
                Db::startTrans();
                try {
                    // 更新信息用户
                    $res = Db::table('v1_user')
                        ->where('v1_user.user_id', $data['user_id'])
                        ->join('v1_user_info', 'v1_user.user_id=v1_user_info.user_id')
                        ->update($info);
                    // 提交事务
                    Db::commit();
                } catch (\Exception $e) {
                    $res = false;
                    // 回滚事务
                    Db::rollback();
                }
                // 判断修改详情
                if ($res) {
                    return request_tips(200, "修改成功");
                } else {
                    return request_tips(500, "未发生改变");
                }
            } else {
                return request_tips(404, "用户不存在");
            }
        } else {
            return request_tips(400, "信息未改变");
        }
    }
}
